// -----------------------------------------------------------------------------
// Copyright (c) 2014-2023 All rights reserved
// *********************************************************************************
// Project Name : CLA
// Author       : DFY
// File Name    : CLA_4.v
// Abstract     : 4bit Carry_lookahead Adder 
module CLA_4 (
	input		[3:0]	a,  //	
	input 		[3:0]	b,	//  
	input 				cin, //上一级进位

	output 		[3:0]	sum //输出	
);
//=================================================================================
// Signal and Parameter declaration
//=================================================================================
wire [3:0] g,p;
reg  [2:0] cout;
//=================================================================================
// Body
//=================================================================================
assign g = a&b;
assign p = a|b;

assign sum[0] = a[0]^b[0]^cin;
assign sum[1] = a[1]^b[1]^cout[0];
assign sum[2] = a[2]^b[2]^cout[1];
assign sum[3] = a[3]^b[3]^cout[2];
always @(*) begin 
	cout[0] = g[0]|p[0]&cin;
	cout[1] = g[1]|g[0]&p[1]|p[1]&p[0]&cin;	
	cout[2] = g[2]|g[1]&p[2]|g[0]&p[2]&p[1]|cin&p[2]&p[1]&p[0];
//	cout[3] = g[3]|g[2]&p[3]|g[1]&p[3]&p[2]|g[0]&p[3]&p[2]&p[1]|cin&p[3]&p[2]&p[1]&p[0];
end

endmodule 

